/**
 * 
 */
package ausgabeUndDatenverwaltung;

import java.util.Comparator;

import einlesenUndDatenverwaltung.*;

/**
 * Diese Klasse ist eine Datenhaltungsklassen. Mit Objekten dieser Klasse wird
 * die Platzkartenliste bestueckt. Die Klasse implementiert das Interface
 * Comparable um eine Sortierung der Platzkarten in der Platzkartenliste zu
 * ermoeglichen.
 * 
 * @author Max Bogner
 * @version (14.01.2014)
 * 
 * 
 */

public class PlatzKarte implements Comparable<PlatzKarte> {
	private PruefungsTag pruefungstag = new PruefungsTag();
	private Student student = new Student();
	private KursListe kursliste = new KursListe();
	// speichert den String, der das Sortierkriterium bestimmt
	// Es gibt zwei Moeglichkeiten:
	// 1. "AnzahlKurse"
	// 2. "StudentenId"
	private static String sortierKriterium = "AnzahlKurse";// "StudentenId"

	/**
	 * Konstruktor
	 * 
	 * @author Max Bogner
	 */
	public void Platzkarte() {

	}

	/**
	 * Gibt die Variable pruefungstag zurueck
	 * 
	 * @author Max Bogner
	 * @return Pruefungstag
	 */
	public PruefungsTag getPruefungstag() {
		return pruefungstag;
	}

	/**
	 * Gibt die Variable sortierKriterium zurueck
	 * 
	 * @author Max Bogner
	 * @return sortierKriterium
	 */
	public static String getSortierKriterium() {
		return sortierKriterium;
	}

	/**
	 * Setzt die Variable sortierKriterium
	 * 
	 * @author Max Bogner
	 * @param sortierKriterium
	 *            auf das die Variable gesetzt werden soll
	 */
	public static void setSortierKriterium(String sortierKriterium) {
		PlatzKarte.sortierKriterium = sortierKriterium;
	}

	/**
	 * Setzt die Variable pruefungstag
	 * 
	 * @author Max Bogner
	 * @param pruefungstag
	 */
	public void setPruefungstag(PruefungsTag pruefungstag) {
		this.pruefungstag = pruefungstag;
	}

	/**
	 * Gibt die Variable student zurueck
	 * 
	 * @author Max Bogner
	 * @return student
	 */
	public Student getStudent() {
		return student;
	}

	/**
	 * Setzt die Variable student
	 * 
	 * @author Max Bogner
	 * @param student
	 *            der gesetzt werden soll
	 */
	public void setStudent(Student student) {
		this.student = student;
	}

	/**
	 * Gibt die Variable kursliste zurueck
	 * 
	 * @author Max Bogner
	 * @return kursliste
	 */
	public KursListe getKursliste() {
		return kursliste;
	}

	/**
	 * Setzt die Variable kursliste
	 * 
	 * @author Max Bogner
	 * @param kursliste
	 */
	public void setKursliste(KursListe kursliste) {
		this.kursliste = kursliste;
	}

	/**
	 * Comparator: Wird benoetigt um die Platzkartenliste zu sortieren.
	 * Vergleicht zwei Platzkarten miteinander anhand der Kurslistengroeße
	 * 
	 * @author: Max Bogner
	 */
	public static Comparator<PlatzKarte> AnzahlKurseAbsteigend = new Comparator<PlatzKarte>() {

		@Override
		public int compare(PlatzKarte arg0, PlatzKarte arg1) {

			return arg1.getKursliste().getKursliste().size()
					- arg0.getKursliste().getKursliste().size();
		}
	};
	/**
	 * Comparator: Wird benoetigt um die Platzkartenliste zu sortieren.
	 * Vergleicht zwei Platzkarten miteinander anhand der Matrikelnummer
	 * 
	 * @author: Max Bogner
	 */
	public static Comparator<PlatzKarte> StudentenId = new Comparator<PlatzKarte>() {

		@Override
		public int compare(PlatzKarte arg0, PlatzKarte arg1) {

			return arg1.getStudent().getMatrikelnummer()
					- arg0.getStudent().getMatrikelnummer();
		}
	};

	/**
	 * Vergleicht Eigenschaften der uebergebenen Platzkarte. Wird je nach
	 * gesetztem Sortierkriterium unterschiedlich ausgeführt. Daher muss vorher
	 * das gesetzt Sortierkriterium explizit gesetzt werden
	 * 
	 * @author Max Bogner
	 * @param platzkarte
	 *            Platzkarte mit der verglichen werde soll
	 */
	@Override
	public int compareTo(PlatzKarte platzkarte) {

		int r = 0;
		if (sortierKriterium == "StudentenId") {
			r = student.getMatrikelnummer()
					- platzkarte.getStudent().getMatrikelnummer();
		} else {
			r = kursliste.getKursliste().size()
					- platzkarte.getKursliste().getKursliste().size();
		}
		return r;

	}

	/**
	 * 
	 * 
	 * Gibt die wichtigsten Eigenschaften der Platzkarte als String zurueck
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 * @author Max Bogner
	 * 
	 * @return String mit den wichtigsten Eigenschaften der Platzkarte
	 */
	@Override
	public String toString() {
		String str = "";

		Student st = student;
		PruefungsTag tag = pruefungstag;
		KursListe kurse = kursliste;
		String platzkartennummer = student.getName() + "_" + tag.getName();
		str = str + "\n" + "Platzkarte " + platzkartennummer + "\n"
				+ "VAWi - Pruefung in " + st.getUniversitaet() + " - "
				+ tag.getName() + "\n" + "Teilnehmer: " + st.getName() + ","
				+ st.getVorname() + "\n" + "Heutige Kurse: " + "\n"
				+ kurse.toString() + "\n";
		return str;

	}
}
